package org.example.demo;


import java.util.Arrays;
import java.util.List;
import java.util.ListIterator;
import java.util.function.Consumer;

public class Demo08 {
    public static void main(String[] args) {
        List<Integer> integerList = Arrays.asList(1, 2, 3, 4, 5, 6, 7);
        highFunction(integerList,System.out::println);
        // 倒序遍历
    }
    public static void highFunction(List<Integer> integerList, Consumer<Integer> consumer) {
        // 使用listIterator而不是iterator，因为我们需要从列表的末尾向前遍历。
        // listIterator允许双向遍历（前后移动），而普通的iterator只能向前遍历。
        // 传入integerList.size()作为参数，表示从列表的最后一个元素之后的位置开始迭代。
        // 这意味着当我们调用previous()时，我们实际上是从列表的最后一个有效元素开始。
        ListIterator<Integer> iterator = integerList.listIterator(integerList.size());

        // 当hasPrevious()返回true时，说明还有前一个元素可以访问。
        // 每次调用previous()，都会返回当前索引位置之前的元素，并将内部索引向前移动一位。
        // 当索引到达0之前的位置时，hasPrevious()将返回false，循环结束。
        while (iterator.hasPrevious()) {
            Integer previous = iterator.previous();
            // 这里可以对previous进行操作，比如打印、修改等
            consumer.accept(previous);
        }
    }
}
